/**
 * 
 */
package com.edu.lawdoc.pvg;


/**
 * @author xiao.hu
 *
 */
public class SafetyPvg {

	public static <T> T doAction(String temporaryPvgName, Callback<T> oCallback) {
		/* 不影响拥有正常pvg的流程 */
		String pvgName = Pvg.getPvgName();
		if(pvgName != null) {
			/* 如果pvg内有值，则不使用 temporaryPvgName */
			return oCallback.invoke();
		}
		
		/* 如果pvg内无值，则使用临时身份进行操作 */
		PvgUser pvg = new PvgUser();
		pvg.setName(temporaryPvgName);
		Pvg.setPvg(pvg);
		
		T r = oCallback.invoke();
		
		Pvg.removePvg();
		return r;
	}
	
	public interface Callback<T> {
		/**
		 * <T> 不是返回值，表示传入参数有泛型
		 * @return
		 */
		T invoke();
	}
}
